package com.iamteer.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.iamteer.dao.IEmployeeDao;
import com.iamteer.entity.Employee;
import com.iamteer.utils.JdbcUtils;
import com.iamteer.utils.PageBean;

/**
 * 3. 数据访问层实现
 * @author Chuck
 *
 */
public class EmployeeDao implements IEmployeeDao{

	@Override
	public void getAll(PageBean<Employee> pb) {

		// 2. 查询总记录数;设置到 pb 对象中
		int totalCount = this.getTotalCount();
		pb.setTotalCount(totalCount);
		
		/*
		 * 问题：jsp 页面首页点上一页；末页点下一页出错
		 * 
		 * 解决：
		 * 		1. 如果当前页 <= 0；当前页设置为 1；
		 * 		2. 如果当前页 > 最大页数，当前页设为最大页数
		 */
		// 判断
		if (pb.getCurrentPage() <= 0) {
			pb.setCurrentPage(1);
		} else if (pb.getCurrentPage() > pb.getTotalPage()) {
			pb.setCurrentPage(pb.getTotalPage());
		}
		
		// 1. 获取当前页：计算查询的起始行、返回行数
		int currentPage = pb.getCurrentPage();
		int index = (currentPage -1) * pb.getPageCount();
		int count = pb.getPageCount();
		
		// 3. 分页查询数据，把查询到的数据设置到 pb 中
		String sql = "select * from employee limit ?,?";
		try {
			// 得到 QueryRunner 对象
			QueryRunner qr = JdbcUtils.getQueryRunner();
			// 根据当前页，查询当前页数据（一页数据）
			List<Employee> pageData = qr.query(sql, new BeanListHandler<Employee>(Employee.class), index, count);
			// 设置数据到 pb 对象中
			pb.setPageData(pageData);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		
	}

	@Override
	public int getTotalCount() {
		String sql = "select count(*) from employee";
		try {
			// 创建 QueryRunner 对象
			QueryRunner qr = JdbcUtils.getQueryRunner();
			// 执行查询，返回结果的第一行的第一列
			Long count = qr.query(sql, new ScalarHandler<Long>());
			return count.intValue();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

}
